home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-09-02 | 2.5 KB | 66 lines | [TEXT/CCL2] |
- ;;; scrollers-patch.lisp
- ;;;
- ;;; Patch file and bug fixes for scrollers.lisp
- ;;;
-
- (in-package :ccl)
-
- (require :scrollers)
-
- ;; The method in scrollers.lisp doesn't subtract the window size from the field
- ;; size. This method does.
-
- (defmethod scroll-bar-limits ((view scroller-mixin))
- (let ((field-size (field-size view)))
- (if field-size
- (normal-scroll-bar-limits view field-size)
- (let ((size (view-size view)))
- (normal-scroll-bar-limits view (add-points size size))))))
-
- ;; The method in scrollers.lisp doesn't inform scroll-bar-changed if
- ;; the scroll-bar-setting changes when the scroll-bars are updated.
- ;; This method does.
-
- (defmethod update-scroll-bars ((self scroller-mixin) &key length position)
- (flet ((set-settings (scroller min max page-size)
- (let ((setting (scroll-bar-setting scroller)))
- (set-scroll-bar-min scroller min)
- (set-scroll-bar-max scroller max)
- (setf (scroll-bar-page-size scroller) page-size)
- (when (and (view-container self)
- (not (< min setting max)))
- (scroll-bar-changed self scroller)))))
- (let* ((pos (view-position self))
- (size (view-size self))
- (h-scroller (h-scroller self))
- (v-scroller (v-scroller self))
- (outline (scroller-outline self))
- h-limits v-limits page-size)
- (when (and pos size) ; auto-sizing may not have happenned yet
- (without-interrupts
- (reposition-scroll-bars self h-scroller v-scroller :length length :position position)
- (when length
- (multiple-value-setq (h-limits v-limits) (scroll-bar-limits self))
- (setq page-size (scroll-bar-page-size self))
- (when h-scroller
- (set-settings h-scroller (point-h h-limits) (point-v h-limits) (point-h page-size)))
- (when v-scroller
- (set-settings v-scroller (point-h v-limits) (point-v v-limits) (point-v page-size))))
- (when outline
- (setq pos (subtract-points pos #@(1 1))
- size (add-points size (scroll-bar-correction self)))
- (set-view-position outline pos)
- (set-view-size outline size)))))))
-
- ;; enhancement to scrollers.lisp
-
- (defmethod set-field-size ((view scroller-mixin) h &optional v)
- "Adjust the field size of a scroller-mixin by setting the field-size slot
- and resizing the scroll bars"
- (setf (slot-value view 'field-size) (make-point h v))
- (update-scroll-bars view :length t))
-
- (provide :scrollers-patch)
-
-
-